Skip to content

feat(app): sum up what happened while you were away in a catch-up card at the top of the chat - #696

Merged
iamnbutler merged 1 commit into
mainfrom
catch-up
Oct 27, 2026
Merged

iamnbutler merged 1 commit into
mainfrom
catch-up

Conversation

@iamnbutler

Copy link
Copy Markdown
Contributor

When you open a channel with unread activity, a "While you were away" card now sits over the top of the chat. It builds on the New divider and mention highlights from #602 / #645. The card is for the demo moment where someone @mentions you in a channel you didn't create, you open it, and you can see what already happened.

The card uses only data the timeline already has, plus the channel summary. It makes no new model calls.

  • Counts: for example "2 messages from mona · 1 agent run". These count the messages and agent runs after the New divider and list who posted.
  • Channel summary: the summary the agent keeps up to date, the same text as the details sidebar, shown in two lines.
  • Mentions of you: one row for each message that mentions you, with an excerpt. Clicking a row scrolls to that message.
  • Finished agent runs: each run's existing recap, or the start of its answer if it has no recap. A run that edited files also shows the file count and +/− lines. A run that opened a PR through a PR tool also shows the PR. Clicking a row scrolls to that run.
  • Jump to first unread: scrolls to the New divider. Dismiss (×) closes the card. Either action closes it until the channel is opened again.

missed() in packages/ui/src/lib/timeline.ts derives everything from the compiled timeline that follows the new item. The card itself is in the shared Timeline in packages/ui. The app now also passes channel.summary.

Verified

I ran a smoke source host on port 4833 with its own ACE_HOME, config and keychain service. A second author, ACE_USER=mona@github.com, created the channel. Their messages were posted with ace say, and real runs were made with ace ask on claude-opus-5-5. I took headless Playwright screenshots at 1280×800, 2x, dark (not committed):

  • /tmp/catchup/catchup-2.png: the card on opening the channel. It shows "2 messages from mona · 1 agent run", the channel summary, "@ mona mentioned you: @iamnbutler going ahead with 5 attempts…", and the run's real recap ("Used sed to change the default attempts = 3 to 5 in retry.ts, then committed…").
  • /tmp/catchup/catchup.png: an earlier round. It also shows "1 file changed" under a run that edited retry.ts.
  • /tmp/catchup/jumped.png: after Jump to first unread. The card is gone and the New divider is in view, with the highlighted mention below it.

bun types and bun run ci pass. The 8 warnings from bun run ci are all in files this PR doesn't touch.

Open questions

  • Placement: the card sits over the top of the timeline instead of at the divider. Opening a chat scrolls to the newest message, so a card at the divider would usually be off screen. While the card is open, it covers the first lines of whatever is in view.
  • Model-written catch-up: the recaps cover runs well, but nothing summarizes a long human back-and-forth; the card only counts those messages. A fast-model "catch-up" over the missed messages would help there. I didn't build one, because it would add a model call each time you open a channel.
  • Files and PRs: these are only listed when the edit or PR used a tool the timeline recognizes. Shell sed edits and gh pr create don't show, the same as in the turn's own file list.
  • Same limit as Unread marks and the New divider are per browser, so a new sign-in shows nothing new #677: what counts as unread is still per browser.

Built in Ace

No. Claude Code (a CLI agent session) made this change outside Ace. It ran in a lane worktree, smoke-tested against an isolated ace serve, and took the screenshots with headless Playwright. This was a delegated agent task without an Ace window to work in. Tracked by the dogfooding meta issue #5.

@iamnbutler
iamnbutler merged commit eaea466 into main Oct 27, 2026
1 check passed
@iamnbutler
iamnbutler deleted the catch-up branch October 27, 2026 16:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant